const Koa = require('koa');
const KoaRouter = require('koa-router');
const KoaView = require('koa-views');
const session = require('koa-session');
const axios = require('axios');

let PORT = process.env.PORT || 3001;
let NAME = process.env.NAME || 'A';

const app = new Koa();
const router = new KoaRouter();

app.keys = ['api:sid'];
app.use(KoaView(__dirname, { extension: 'ejs' }));
app.use(session({ key: 'sid' }, app));

router.get('/favicon.ico', async (ctx) => {
    ctx.status = 200;
    return;
});

router.get('/', async (ctx) => {
    // 判断 session 中是否存在用户信息
    const user = ctx.session.user;

    if (user) {
        await ctx.render('dashboard', { user, name: NAME });
        return;
    }

    /**
     * 没登录，肯定是要登录的
     *
     * 1. 有没有 token，如果有 token，就说明已经输入过用户名密码了，直接校验 token 即可
     * 2. 没有 token，就直接去登录吧
     *
     */
    const { token } = ctx.query;

    if (token) {
        const res = await axios.get(
            `http://localhost:3000/checkToken?token=${token}`
        );

        if (res.data.code !== 200) {
            ctx.body = res.data.message;
        }

        // 把用户信息写入 session 中
        const user = {
            username: 'lstyr',
            nickname: '杨瑞',
            email: 'lstyr@outlook.com',
        };

        ctx.session = {
            user,
        };

        // 显示页面
        await ctx.render('dashboard', { user, name: NAME });
        return;
    }

    // token 不存在，get
    await ctx.redirect(
        `http://localhost:3000/?redirect=${ctx.host + ctx.originalUrl}`
    );
});

app.use(router.routes());

app.listen(PORT, () => {
    console.log(`应用系统${NAME}已启动`);
});
